
package com.dsiguero.tfg.percentdroid;

import com.dsiguero.tfg.percentdroid.drawer.list.item.EntryAdapter;
import com.dsiguero.tfg.percentdroid.drawer.list.item.EntryItem;
import com.dsiguero.tfg.percentdroid.drawer.list.item.HeaderItem;
import com.dsiguero.tfg.percentdroid.drawer.list.item.Item;

import android.content.res.Configuration;
import android.os.Bundle;
import android.support.v4.app.ActionBarDrawerToggle;
import android.support.v4.app.ActivityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.Toast;

import java.util.ArrayList;

public class BaseActivity extends ActionBarActivity {

    protected final int CONTENT_LAYOUT_ID = R.id.content;

    private String[] opcionesMenu;

    private DrawerLayout drawerLayout;

    private ListView drawerList;

    private ActionBarDrawerToggle drawerToggle;

    private RelativeLayout drawerRelLayout;

    // private SearchView mSearchView;

    private ArrayList<Item> drawerItems = new ArrayList<Item>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // TODO AQUI SE CAMBIA EL THEME EN TEORIA
        setContentView(R.layout.activity_base);

        // Cabecera de la lista lateral
        drawerItems.add(new HeaderItem("Bebés"));

        // Elementos de la lista lateral (bebes)
        int sexoImgId;
        for (int i = 0; i < 5; i++) {
            if (i % 2 == 0) {
                sexoImgId = R.drawable.ic_male_sym;
            } else {
                sexoImgId = R.drawable.ic_female_sym;
            }

            drawerItems.add(new EntryItem("Item " + i, sexoImgId));
        }

        EntryAdapter adapter = new EntryAdapter(this, drawerItems);

        opcionesMenu = new String[] { "Opcion 1", "Opcion 2", "Opcion 3", "Opcion 1", "Opcion 2",
                "Opcion 3", "Opcion 1", "Opcion 2", "Opcion 3", "Opcion 1", "Opcion 2", "Opcion 3",
                "Opcion 1", "Opcion 2", "Opcion 3", "Opcion 1", "Opcion 2", "Opcion 3", "Opcion 1",
                "Opcion 2", "Opcion 3", "Opcion 1", "Opcion 2", "Opcion 3", "Opcion 1", "Opcion 2",
                "Opcion 3", "Opcion 1", "Opcion 2", "Opcion 3", "Opcion 1", "Opcion 2", "Opcion 3",
                "Opcion 1", "Opcion 2", "Opcion 3", "Opcion 1", "Opcion 2", "Opcion 3", "Opcion 1",
                "Opcion 2", "Opcion 3", "Opcion 1", "Opcion 2", "Opcion 3", "Opcion 1", "Opcion 2",
                "Opcion 3" };

        // se obtienen los parámetros
        drawerLayout = (DrawerLayout)findViewById(R.id.drawer_layout);

        drawerRelLayout = (RelativeLayout)findViewById(R.id.left_drawer_layout);
        drawerRelLayout.setOnClickListener(null);

        drawerList = (ListView)findViewById(R.id.left_drawer_list);

        // adapter para la lista del menú izquierdo
        /* drawerList.setAdapter(new
         * ArrayAdapter<String>(getSupportActionBar().getThemedContext(),
         * android.R.layout.simple_list_item_1, opcionesMenu)); */

        drawerList.setAdapter(adapter);

        // Captura de click en la lista del menu izquierdo
        drawerList.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView parent, View view, int position, long id) {
                // Cerrar drawer al hacer onclick en un item
                drawerLayout.closeDrawers();
                Toast.makeText(getApplicationContext(), "Item lateral", Toast.LENGTH_SHORT).show();
            }
        });

        // Resources para open y closed
        drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, R.drawable.ic_drawer,
                R.string.drawer_open, R.string.drawer_close) {

            // Drawer cerrado
            @Override
            public void onDrawerClosed(View view) {
                ActivityCompat.invalidateOptionsMenu(BaseActivity.this);
            }

            // Drawer abierto
            @Override
            public void onDrawerOpened(View drawerView) {
                ActivityCompat.invalidateOptionsMenu(BaseActivity.this);
            }
        };

        drawerLayout.setDrawerListener(drawerToggle);

        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setHomeButtonEnabled(true);

    }

    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {
        // boolean menuAbierto = drawerLayout.isDrawerOpen(drawerList);
        // hideMenuItems(menu, menuAbierto);
        // menu.findItem(R.id.action_search).setVisible(!menuAbierto);

        return super.onPrepareOptionsMenu(menu);
    }

    private void hideMenuItems(Menu menu, boolean visible) {
        for (int i = 0; i < menu.size(); i++) {
            menu.getItem(i).setVisible(visible);
        }
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        /* switch (item.getItemId()) { // Para el boton buscar case
         * R.id.action_search: mSearchView.setIconified(false); return true; } */
        // Esto funca para el menu
        if (drawerToggle.onOptionsItemSelected(item))
            return true;
        return false;
    }

    @Override
    protected void onPostCreate(Bundle savedInstanceState) {
        super.onPostCreate(savedInstanceState);
        drawerToggle.syncState();
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        drawerToggle.onConfigurationChanged(newConfig);
    }

    // Busqueda en actionbar
    /* @Override public boolean onQueryTextChange(String arg0) { return false; }
     * 
     * @Override /public boolean onQueryTextSubmit(String arg0) {
     * Toast.makeText(this, arg0, Toast.LENGTH_LONG).show(); return true; } */

    // Class activity
    /* Este método obtiene la view a la que se refiere el id (SOLO
     * MainMenuItemView), sino fallaria al hacer el casting y la asignación.
     * 
     * A continuacion se le asigna un OnClickListener anónimo en el cual se crea
     * el Intent y se lanza la Activity que se le pasa como segundo parámetro */

    /* TODO Esto es temporal, solo para ir borrando el shared_prefs */
    @Override
    protected void onStop() {
        super.onStop();
    }

    /* Este método reemplaza un layout por otro. El layout que queremos
     * reemplazar será destinationId y por el cual lo queremos reemplazar será
     * sourceId */
    protected void replaceContentLayout(int sourceId, int destinationId) {
        View contentLayout = findViewById(destinationId);

        // Se obtiene el padre del View correspondiente, y el índice que ocupa
        // el View dentro de él
        ViewGroup parent = (ViewGroup)contentLayout.getParent();
        int index = parent.indexOfChild(contentLayout);

        // Se elimina el View y se reemplaza
        parent.removeView(contentLayout);
        contentLayout = getLayoutInflater().inflate(sourceId, parent, false);
        parent.addView(contentLayout, index);
    }
}
